package com.zabolotniy.tinycon;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;

public class MainActivity extends Activity {

    private EditText textInfo;
	private int isCheckedFrom;
	private int isCheckedTo;
	private EditText textHistory;
	private String stringFrom;
	private String stringTo;
	private float fromValue;
	private float toValue;


	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        textInfo 	= (EditText) findViewById(R.id.editText1);
        textHistory = (EditText) findViewById(R.id.historyWindow);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    public void buttonConvert_Click(View view){
    	switch(view.getId()){
    	case R.id.button_convert:
    		// the radio button "From"
    		RadioButton KMeterButton 	= (RadioButton) findViewById(R.id.radio_KM);
    		RadioButton MileButton		= (RadioButton) findViewById(R.id.radio_MI);
    		RadioButton YardButton		= (RadioButton) findViewById(R.id.radio_YD);
    		RadioButton FootButton		= (RadioButton) findViewById(R.id.radio_FT);
    		RadioButton InchButton		= (RadioButton) findViewById(R.id.radio_IN);
    		
    		// the radio button "To"
    		RadioButton ToKMeterButton 	= (RadioButton) findViewById(R.id.to_radio_KM);
    		RadioButton ToMileButton	= (RadioButton) findViewById(R.id.to_radio_MI);
    		RadioButton ToYardButton	= (RadioButton) findViewById(R.id.to_radio_YD);
    		RadioButton ToFootButton	= (RadioButton) findViewById(R.id.to_radio_FT);
    		RadioButton ToInchButton	= (RadioButton) findViewById(R.id.to_radio_IN);
    		
    		// TODO: create a convert method
    		if ( textInfo.getText().length() == 0 ){
    			Toast.makeText(this, "Введите значение", Toast.LENGTH_LONG).show();
    			return;
    		}
    		// get data from user
    		float inputValue = Float.parseFloat(textInfo.getText().toString());
    		
    		isCheckedFrom 	= 0;
    		isCheckedTo		= 0;
    		// check which button "From" is Checked 
    		if (KMeterButton.isChecked()){
    			isCheckedFrom = 1;
    			stringFrom = "KM";
    		} 
    		else if(MileButton.isChecked()){
    			isCheckedFrom = 2;
    			stringFrom = "MI";
    		}
    		else if (YardButton.isChecked()){
    			isCheckedFrom = 3;
    			stringFrom = "YD";
    		}
    		else if(FootButton.isChecked()){
    			isCheckedFrom = 4;
    			stringFrom = "FT";
    		}
    		else if (InchButton.isChecked()){
    			isCheckedFrom = 5;
    			stringFrom = "IN";
    		}
    		
    		// check which button "To" is Checked 
    		if (ToKMeterButton.isChecked()){
    			isCheckedTo = 1;
    			stringTo = "KM";
    		} 
    		else if(ToMileButton.isChecked()){
    			isCheckedTo = 2;
    			stringTo = "MI";
    		}
    		else if (ToYardButton.isChecked()){
    			isCheckedTo = 3;
    			stringTo = "YD";
    		}
    		else if(ToFootButton.isChecked()){
    			isCheckedTo = 4;
    			stringTo = "FT";
    		}
    		else if (ToInchButton.isChecked()){
    			isCheckedTo = 5;
    			stringTo = "IN";
    		}
    		
    		// converting
    		fromValue = 0;
    		fromValue = inputValue;
    		inputValue = convertValue(inputValue, isCheckedFrom, isCheckedTo);
    		toValue = inputValue;
    		if (inputValue != 0){
    			textInfo.setText(String.valueOf(inputValue));
    			// adding a history
    			textHistory.setText(String.valueOf(fromValue+" ("+stringFrom+") = "+toValue+" ("+stringTo+")"));
    		}
    		
    	}
    }


	private float convertValue(float i_inputValue, int i_CheckedFrom, int i_CheckedTo) {
		// TODO Auto-generated method stub
		switch (i_CheckedFrom){
			case 1:{ // from KM
				if (i_CheckedTo == 1){ 			// to KM 
					return i_inputValue;
				}
				else if (i_CheckedTo == 2){		// to MI
					return (float)(i_inputValue * 0.62);
				}
				else if (i_CheckedTo == 3){		// to YD
					return (float)((i_inputValue*1000) * 1.0936133);
				}
				else if (i_CheckedTo == 4){		// to FT
					return (float)((i_inputValue*1000) * 3.2808399);
				}
				else if (i_CheckedTo == 5){		// to IN
					return (float)((i_inputValue*100000) * 0.393700787);
				}
				break;
			}
			case 2:{ // from MI
				if (i_CheckedTo == 1){			// to KM
					return (float)(i_inputValue * 1.609344);
				}
				else if (i_CheckedTo == 2){		// to MI
					return (float)(i_inputValue);
				}
				else if (i_CheckedTo == 3){		// to YD
					return (float)(i_inputValue * 1760);
				}
				else if (i_CheckedTo == 4){		// to FT
					return (float)(i_inputValue * 5280);
				}
				else if (i_CheckedTo == 5){		// to IN
					return (float)(i_inputValue * 63360);
				}
				break;
			}
			case 3:{ // from YD
				if (i_CheckedTo == 1){			// to KM
					return (float)(i_inputValue * 0.0009144);
				}
				else if (i_CheckedTo == 2){		// to MI
					return (float)(i_inputValue * 0.000568181818);
				}
				else if (i_CheckedTo == 3){		// to YD
					return (float)(i_inputValue);
				}
				else if (i_CheckedTo == 4){		// to FT
					return (float)(i_inputValue * 3);
				}
				else if (i_CheckedTo == 5){		// to IN
					return (float)(i_inputValue * 36);
				}
				break;
			}
			case 4:{ // from FT
				if (i_CheckedTo == 1){			// to KM
					return (float)(i_inputValue * 0.0003048);
				}
				else if (i_CheckedTo == 2){		// to MI
					return (float)(i_inputValue * 0.000189393939);
				}
				else if (i_CheckedTo == 3){		// to YD
					return (float)(i_inputValue * 0.333333333);
				}
				else if (i_CheckedTo == 4){		// to FT
					return (float)(i_inputValue);
				}
				else if (i_CheckedTo == 5){		// to IN
					return (float)(i_inputValue * 12);
				}
				break;
			}
			case 5:{ // from IN
				if (i_CheckedTo == 1){			// to KM
					return (float)(i_inputValue *  0.0000254);
				}
				else if (i_CheckedTo == 2){		// to MI
					return (float)(i_inputValue * 0.000015782828300000002);
				}
				else if (i_CheckedTo == 3){		// to YD
					return (float)(i_inputValue * 0.0277777778);
				}
				else if (i_CheckedTo == 4){		// to FT
					return (float)(i_inputValue * 0.0833333333);
				}
				else if (i_CheckedTo == 5){		// to IN
					return (float)(i_inputValue);
				}
				break;
			}
			default:{
				Toast.makeText(this, "Не указано исходное направление конвертации"
						, Toast.LENGTH_LONG).show();
				break;
			}
		}
		return 0;
	}
    
}
